#ifndef _edaDefine_h_
#define _edaDefine_h_

// Polling sleep time
#define SLEEP_TIME                  2        // 2 seconds

// Define the status code
#define STATUS_PENDING              0
#define STATUS_RUNNING              1
#define STATUS_FINISHED             2
#define STATUS_ERROR                3

/* for Class Serialize */
#define _SYSCLASSID_                          50000
#define _USERCLASSID_                         0

#define _CLSID_INVALID_                       0
#define _CLSID_EDAMOVE_                       2

/* for edaHC */
#define _CLSID_EDAMOVEGEN_                    3
#define _CLSID_EDAHCMOVEEXPL_                 4
#define _CLSID_EDAMOVESELECT_                 5
#define _CLSID_EDABESTIMPRSELECT_             6

/* for edaSA */
#define _CLSID_EXP_COOLING_SCHEDULE_          200
#define _CLSID_LINEAR_COOLING_SCHEDULE_       201

#define _CLSID_GEN_CONTINUE_                  300
#define _CLSID_FIT_CONTINUE_                  301
#define _CLSID_TIME_CONTINUE_                 302

/* for edaTS */
#define _CLSID_EDATABULIST_                   400
#define _CLSID_EDATSMOVEEXPL_                 401
#define _CLSID_EDAASPIRCRIT_                  402
#define _CLSID_EDANOASPIRCRIT_                403
#define _CLSID_EDAIMPRBESTFITASPIRCRIT_       404
#define _CLSID_EDASIMPLEMOVETABULIST_         405
#define _CLSID_EDASIMPLESOLUTIONTABULIST_     406

/* meta-heuristics */
#define _CLSID_EDAHC_                         100
#define _CLSID_EDASA_                         101
#define _CLSID_EDATS_                         102

#ifdef _DEBUG_
#define printDebug(dbglevel, dbg) \
  if (dbglevel <= _DEBUG_) { \
    std::cout << "[" << __FILE__ << ":" << __LINE__ << "] " dbg << endl; \
  }
#else
#define printDebug(dbglevel, dbg)
#endif

#define setClassID(x)        \
  virtual int getClassID() { \
    return x;                \
  }

#endif
